home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
putz
/
catputz.m
next >
Wrap
Text File
|
1997-10-26
|
33KB
|
931 lines
MODULE CatPutz;
(* Modul: CatPutz *)
(* Autor: Dirk Steins *)
(* erstellt am: 5.4.91 *)
(* letzte nderung am: 07.10.93 *)
(* Version: 2.25 *)
(* Interne Version: V#295 *)
(* Kommentar: GEM-Version von CatPutz, alte Version *)
(* umbenannt zu CatPutz2 *)
(*==============================================================*)
(* Datum Version nderung *)
(*==============================================================*)
(* *)
(* 5.4.91 0.9 Modul erstellt aus altem CatPutz, *)
(* GEM-Oberflche eingebaut und *)
(* Lschen ber mehrere Gruppen. *)
(* 17.4.91 1.0 Version an Jo geschickt. *)
(* 26.4.91 1.1 Bug mit leeren Gruppen behoben *)
(* 28.4. *)
(* 29.4. 1.1 Statistik-Ausgabe in Fenster, *)
(* Fensterverwaltung implementiert *)
(* 30.4. 1.1 Fensterverwaltung komplett, Zeichen- *)
(* satzauswahl drin, Ausgabe in Datei *)
(* 22.1.92 1.23 Bug in mtTerminal behoben, Zeichensatz *)
(* sollte jetzt immer richtig gesetzt sein.*)
(* 14.2.92 1.24 Bug in ConvertDate behoben, der zu pein-*)
(* lichen Datenverlusten gefhrt hat. *)
(* Relatives Datum auf Ende Januar ging *)
(* schief. *)
(* 16.4.92 1.25 Neue Window-Library eingebaut, un- *)
(* empfindlicher gegen Fehler in der *)
(* Parameterdatei gemacht. *)
(* 17.4.92 1.25 Noch einen kleinen Bug im Schreiben *)
(* der neuen GRUPPEN.POS behoben. *)
(* 24.5.92 1.26 Versionsnummer gendert und compiliert *)
(* fr neue CAT-Version mit gendertem *)
(* GRUPPEN.POS *)
(* 19.10.92 1.27 Anpassung an Datenbank von Cat 2.0 *)
(* 1.11.92 1.28 Jetzt auch noch berprfung auf Datum *)
(* eingebaut, Messages mit kaputtem Datum *)
(* werden jetzt auch totalgelscht. Die *)
(* kaputten Nachrichten tauchen jetzt auch *)
(* als totalgelschte in der Statistik auf *)
(* 12.92 1.29 Lschen von einzelnen Gruppen eingebaut.*)
(* 29.12.92 1.30 CAT.INF kann nachgeladen werden, und *)
(* man kann die Liste auch auf das Clip- *)
(* board ausgeben (als .TXT und .CSV). *)
(* 21.01.93 1.31 Kein Absturz mehr, wenn kein GRUPPEN.POS*)
(* vorhanden ist. Dann werden einfach keine*)
(* neuen Positionen geschrieben. *)
(* 07.02.93 1.32 Nach dem Neuladen einer CAT.INF wurde *)
(* die Liste im Fenster nicht upgedatet. *)
(* 26.09.93 2.11 Anfang der Umstellung auf weitere *)
(* CAT-Module *)
(* 30.09.93 2.15 CatPutz luft mit CATGROUP.*, lscht *)
(* jetzt richtig, Lschanzeige im Fenster *)
(* und parallel *)
(* 2.10.93 2.15 CatPutz prft, ob CAT oder CatPutz *)
(* schon aktiv sind und verweigert dann *)
(* den Start *)
(* 4.10.93 2.16 Einbau der Kommandozeilensteuerung *)
(* 7.10.93 2.16 Beim Lschen ber die Kommandozeile *)
(* wurden auch Nachrichten mit dem *)
(* Interessant-Flag glscht. Das sollte *)
(* nicht der Fall sein, deshalb wurde das *)
(* gendert. Allerdings kann es dadurch *)
(* passieren, da beim Lschen mit Mengen- *)
(* angabe die Zielmenge berschritten wird *)
(* 14.10.93 2.17 Auswertung der Fehlercodes nach Fread/ *)
(* Fwrite war falsch *)
(* 21.10.93 2.17 Gruppennamen sind wieder Case-Insensitiv*)
(* in der CFG-Datei. *)
(* Das Datum in der Konfigurationsbox ist *)
(* nicht mehr ab und zu uninitialisiert. *)
(* 29.10.93 2.18 Mauszeiger ist nur noch dann ein Ball, *)
(* wenn ein eigenes Fenster das Topwindow *)
(* ist. *)
(* 4.11.93 2.20 Beim Speichern der Statistik war ein *)
(* Filename nicht initialisiert. *)
(* 9.11.93 2.21 wind_update (check&Set) wird nur noch *)
(* unter MTOS oder Mag!X benutzt. *)
(* 13.11.93 2.22 Kommandozeilenparameter -a fr alle *)
(* Gruppen eingebaut. *)
(* Der Gruppenname sollte jetzt immer *)
(* richtig gezeichnet werden, auch wenn *)
(* beim Gruppenwechsel die Ausgabe *)
(* gesperrt war. *)
(* 28.11.93 2.23 Bug in ConvertDate behoben *)
(* Bug in Statistikausgabe behoben *)
(* 4.12.93 2.24 Es wird jetzt immer getestet, ob der *)
(* eingestellte TMP-Pfad existiert. Wenn *)
(* das nicht der Fall ist, dann wird der *)
(* Databasepfad genommen. *)
(* 7.12.93 2.24 Ein paar weitere Sicherheitsabfragen *)
(* beim Dateihandling eingebaut. *)
(* 22.12.93 2.25 Das Fenster wird auch im Batchmodus *)
(* nach jeder Gruppe refresht. *)
(* 11.1.94 2.25 CatPutz-Logo gendert. REQ-File wird *)
(* am Ende geschlossen. *)
(* 14.1.94 2.26 Bei wenig freiem Speicher konnte es *)
(* passieren, das CATPUTZ Speicherblcke *)
(* zerstrt hat und den Rechner abge- *)
(* schossen hat. Das trat dann auf, wenn *)
(* der zu schreibende Block mehr als *)
(* doppelt so gro war wie der Writebuffer *)
(* Wenn das Lschdatum grer als das *)
(* Tagesdatum ist, kommt ein Alert *)
(* 14.7.94 2.26 Version freigegeben *)
(* 17.7.94 2.27 Endlosschleife bei Lschen mit -a ber *)
(* die Kommandozeile behoben *)
(* *)
(*==============================================================*)
(* Konzept fr CatPutz 3.0:
*
* Gruppenliste stndig im Fenster, eine oder mehrere selektierbar,
* umschaltbare Anzeige zwischen Einstellung und Statistik.
* Gelscht wird in den im Fenster selektierten Gruppen, bzw.
* die selektierten Gruppen komplett.
* Steuerung ber Dialog mit im Fenster.
* Alle Lschaktionen knnen auch im Hintergrund laufen, es wird
* der wind_update (get) Modus benutzt, Dialog liegt im Fenster.
* Es wird Filelocking untersttzt, so da kein anderes Programm in der
* Zeit auf die bearbeitete Database zugreifen kann.
*
* Was ist dafr alles zu tun:
* neue Gruppenliste bestehend aus GroupSelect und Statistikinformationen
* Neue Fensterfunktionen dafr.
* Konfigurierbare Ausgabe
* Modul nur fr Lschen in einer Gruppe
* Modul fr Fortschrittsanzeige
*
*)
FROM SYSTEM IMPORT ADDRESS, ADR, CADR, TSIZE, BYTE, ASSEMBLER, CALLSYS;
FROM MagicAES IMPORT
AESIntIn, AESAddrIn, AESIntOut,
MenuBar, MenuTnormal, MenuIenable,
EvntPmulti, MNSELECTED, APTERM, MUKEYBD,
MUMESAG, MUBUTTON, MUM1,
KRSHIFT, KLSHIFT, KCTRL, KALT;
FROM MagicSys IMPORT sBITSET, CastToInt, CastToBitset, Basepage;
IMPORT MagicStrings, MagicAES, MagicSys, MagicTypes;
(* magic tools *)
FROM mtAppl IMPORT
ApplTerm, MouseArrow;
IMPORT mtCommand, mtAppl, mtDials, mtAlerts, mtAESMenus;
(* mos *)
IMPORT PrgCtrl;
FROM Storage IMPORT ALLOCATE, DEALLOCATE, MemAvail;
(* strings *)
FROM StrConv IMPORT StrToCard;
IMPORT Strings, Lists;
FROM Lists IMPORT LDir;
(* Disk I/O *)
FROM Directory IMPORT SetDefaultPath;
(* eigene Module *)
FROM PutzTypes IMPORT grListEntry, ptrGrEntry, defaultOpts, delState,
totalEntry, putzList, groupList, displayList,
listEntryType, displayListEntry, ptrDispEntry;
FROM PutzRsc IMPORT
PtrObjTree, menu,
InitResource, doInfo, doOptBox, SaveParameter, LoadParameter,
ClrRsrc, doPathBox, GetTreeAddr, ReplaceStr, actBox;
IMPORT Catputz2;
FROM PutzWindows IMPORT OpenWindow, GetWindowFont, SetWindowFont,
SetNewList, IsPutzWindow, RedrawEntry;
FROM PutzList IMPORT InitFormat;
IMPORT PutzDo, PutzGr;
IMPORT PutzLog, PutzTypes, PutzAction, PutzGroup, PutzHelp;
(* CAT-Module: *)
FROM ConvertDate IMPORT DateOk, StrToDate;
IMPORT WdwManager;
FROM SearchMenu IMPORT MenuSearch;
IMPORT dataSys, Infofiles, ConvertDate;
IMPORT ConfVars, MTPaths, CatGlobal, AssFuncs;
FROM Void IMPORT v;
FROM dataSys IMPORT posType;
IMPORT Mintbind;
(* Konzept fr CatPutz:
*
* Lschen in einer Gruppe geht wie folgt vor:
*
* Es wird ein Array angelegt von 0..65535, in dem pro Message der neue Index
* eingetragen wird. Als Feldindex dient dabei die Messagenummer.
* Das Feld wird zuerst mit 65535 fr alle Eintrge initialisiert.
* Bei einer Teillschung wird der Messagetext durch den String
* <Message wurde gelscht ersetzt>.
* Bei einer Totallschung wird die Nachricht komplett entfernt.
* Die Kommentarverkettung wird am Ende (wegen der rechts-Verkettung)
* ber das Array wiederhergestellt.
* Das ganze funktioniert so, da alle nachrichten, die nicht gelscht werden,
* in ein neues *.DAT File kopiert werden. Bei einer Teillschung wird der
* Messagetext ersetzt und die Messagelnge angepat.
*)
CONST cWdwOpen = 'StatWindowOpen';
VAR
wdwHandle : INTEGER;
VAR msgBuf : ARRAY [0..15] OF INTEGER;
ende : BOOLEAN;
but : CARDINAL;
event : sBITSET;
(*----------------- Window Handling --------------------------*)
TYPE mSet = SET OF [0..255];
VAR menuSet : mSet;
PROCEDURE EnableItem (tree : ADDRESS; item : INTEGER; enable : BOOLEAN);
BEGIN
IF enable
THEN
IF ~(item IN menuSet) THEN
MagicAES.MenuIenable (menu, item, 1);
INCL(menuSet, item);
END;
ELSE
IF item IN menuSet THEN
MagicAES.MenuIenable (menu, item, 0);
EXCL(menuSet, item);
END;
END;
END EnableItem;
PROCEDURE EnableMenuItems ();
VAR wdwOpen: BOOLEAN;
BEGIN
ConfVars.GetConfDefBool (cWdwOpen, wdwOpen, FALSE);
IF wdwOpen
THEN
wdwOpen := IsPutzWindow (wdwHandle);
END;
IF ~wdwOpen
THEN
wdwHandle := -1;
END;
EnableItem (menu, Fmopen, ~wdwOpen);
EnableItem (menu, Fmclose, wdwOpen);
END EnableMenuItems;
PROCEDURE openWind();
BEGIN
OpenWindow (displayList, wdwHandle);
END openWind;
(*-------------- Menu Handling -----------------------------*)
VAR quitProg : BOOLEAN;
groupDeleted: BOOLEAN;
PROCEDURE careForWindow();
VAR isOpen: BOOLEAN;
BEGIN
ConfVars.GetConfDefBool (cWdwOpen, isOpen, FALSE);
IF isOpen
THEN
openWind();
END;
END careForWindow;
PROCEDURE menuManager (item, menuIndex : CARDINAL; kstate : BITSET);
VAR grEntry : ptrGrEntry;
font,
fontSize: INTEGER;
wdwOpen : BOOLEAN;
vdi : INTEGER;
BEGIN
CASE item OF
Fmopen : IF ~IsPutzWindow (wdwHandle) THEN openWind(); END |
Fmclose : IF IsPutzWindow (wdwHandle) THEN v.bool := WdwManager.CloseWindow (wdwHandle, FALSE); END |
Fmsave : SaveParameter (MTPaths.DataPath); |
Fmquit : quitProg := TRUE; |
Aboutobj : doInfo(); |
ELSE
END;
MenuTnormal (menu, menuIndex, 1);
END menuManager;
PROCEDURE msgHandler (pBuf : ADDRESS; kstate : BITSET): BOOLEAN;
VAR pBuff: POINTER TO ARRAY [0..15] OF INTEGER;
BEGIN
pBuff := pBuf;
CASE pBuff^[0] OF
MNSELECTED : menuManager (pBuff^[4], pBuff^[3], kstate); |
APTERM : quitProg := TRUE; |
ELSE
END;
RETURN TRUE;
END msgHandler;
VAR mrect : RECORD
CASE :BOOLEAN OF
TRUE : x,y,w,h : INTEGER|
FALSE: adr, dum: ADDRESS
END
END;
PROCEDURE setMultiParam();
BEGIN
AESIntIn[0] := CastToInt (sBITSET{MUKEYBD, MUMESAG, MUBUTTON, MUM1});
AESIntIn[1] := 259;
AESIntIn[2] := INTEGER({1,0});
AESIntIn[3] := INTEGER({});
AESIntIn[4] := MagicAES.LeaveRect;
WITH mrect DO
AESIntIn[5] := x;
AESIntIn[6] := y;
AESIntIn[7] := w;
AESIntIn[8] := h;
END;
AESAddrIn[0] := ADR (msgBuf);
END setMultiParam;
VAR scan : CHAR;
key : CHAR;
kstate : sBITSET;
keyscan : INTEGER;
moX,
moY : INTEGER;
moButton: BITSET;
moClicks: INTEGER;
PROCEDURE getMultiResult();
BEGIN
moX := AESIntOut[1];
moY := AESIntOut[2];
moButton := MagicSys.CastToBitset(AESIntOut[3]);
kstate := CastToBitset(AESIntOut[4]);
keyscan := AESIntOut[5];
moClicks := AESIntOut[6];
(* Das auseinanderpflcken der einzeilnen Bytes geht in Assembler
* einfacher als in M2
*)
ASSEMBLER
MOVE.W keyscan,D0 ; kreturn (ASCII und Scan)
MOVE.B D0,key ; Ascii nach key (Bits 0..7)
LSR.W #8,D0 ; D0 rotieren
MOVE.B D0,scan ; Scancode holen (Bits 8..15)
END;
END getMultiResult;
PROCEDURE CheckSingleCAT(): BOOLEAN;
CONST isDaAlt = '[3][CATPUTZ:|CAT oder CatPutz|ist schon gestartet, deshalb|kann CatPutz nicht laufen!][[Abbruch]';
VAR appName : PutzTypes.FileStr;
i : INTEGER;
otherId : INTEGER;
BEGIN
IF CatGlobal.multiTask
THEN
IF CatGlobal.multiTOS OR (CatGlobal.magIx & (CatGlobal.magIxVer >= $200))
THEN
(* CAT mittels ApplSearch suchen *)
FOR i := 0 TO 12 DO appName[i] := 0C; END;
IF MagicAES.ApplSearch (MagicAES.APFIRST, appName, v.int, otherId)
THEN
REPEAT
Strings.DelTrailingBlanks (appName);
IF (otherId # mtAppl.ApplIdent) &
(Strings.StrEqual(appName, 'CAT') OR
Strings.StrEqual(appName, 'CATPUTZ'))
THEN
v.int := mtAlerts.Alert (1, isDaAlt);
(* Tja, leider ein anderes CAT gefunden *)
RETURN FALSE
END;
FOR i := 0 TO 12 DO appName[i] := 0C; END;
UNTIL ~MagicAES.ApplSearch (MagicAES.APNEXT, appName, v.int, otherId);
END;
ELSIF CatGlobal.magIx
THEN
FOR i := 0 TO MagicAES.AESGlobal.apCount-1 DO
IF i # mtAppl.ApplIdent
THEN
appName[0] := '?';
appName[1] := 0C;
appName[3] := 0C;
appName[2] := CHR(i);
IF (MagicAES.ApplFind (ADR(appName)) # 0)
THEN
Strings.DelTrailingBlanks (appName);
IF Strings.StrEqual ('CAT', appName) OR
Strings.StrEqual ('CATPUTZ', appName)
THEN
v.int := mtAlerts.Alert (1, isDaAlt);
RETURN FALSE
END;
END;
END;
END;
END;
END;
RETURN TRUE;
END CheckSingleCAT;
PROCEDURE performCmdDelete(group: ptrGrEntry; mode: PutzTypes.delMode;
number: CARDINAL; date: LONGCARD): BOOLEAN;
VAR i : CARDINAL;
putzOpts : PutzTypes.putzOptsRec;
res : BOOLEAN;
BEGIN
putzOpts := PutzDo.InitGroupFlags (group^.info^.catNumber, FALSE, res);
IF ~res & (mode = PutzTypes.dFlags)
THEN
PutzLog.putTime();
PutzLog.WriteString ('Lschen nach Flags nicht mglich, da Datumsfehler in');
PutzLog.WriteLn;
PutzLog.WriteString ('der Gruppenkonfiguration von ');
PutzLog.WriteString (group^.info^.name^);
PutzLog.WriteLn;
RETURN res
END;
putzOpts.dMode := mode;
CASE mode OF
PutzTypes.dNum : PutzLog.putTime();
PutzLog.WriteString ('Lsche nach Messages');
PutzLog.WriteLn;
PutzLog.putTime();
PutzLog.WriteString ('vorgesehene Restmessages: ');
PutzLog.WriteCard (number);
PutzLog.WriteLn;
putzOpts.number := number; |
PutzTypes.dDate : PutzLog.putTime();
PutzLog.WriteString ('Lsche nach Datum');
PutzLog.WriteLn;
PutzLog.putTime();
PutzLog.WriteString ('Lschdatum: ');
PutzLog.WriteCard (date);
PutzLog.WriteLn;
putzOpts.delDate := date; |
PutzTypes.dDateAndNum : PutzLog.putTime();
PutzLog.WriteString ('Lsche nach Datum und Messages');
PutzLog.WriteLn;
PutzLog.putTime();
PutzLog.WriteString ('vorgesehene Restmessages: ');
PutzLog.WriteCard (number);
PutzLog.WriteLn;
PutzLog.putTime();
PutzLog.WriteString ('Lschdatum: ');
PutzLog.WriteCard (date);
PutzLog.WriteLn;
putzOpts.number := number;
putzOpts.delDate := date; |
PutzTypes.dFlags : PutzLog.putTime();
PutzLog.WriteString ('Lsche nach Flags');
PutzLog.WriteLn; |
ELSE
END;
IF (mode = PutzTypes.dNum) & (number = 0)
THEN
PutzLog.WriteString ('Lsche Gruppe komplett: ');
PutzLog.WriteString (group^.info^.name^);
PutzLog.WriteLn;
res := PutzGroup.deleteGroup (group, TRUE);
IF res
THEN
groupDeleted := TRUE;
(* Displayliste neu aufbauen *)
IF IsPutzWindow (wdwHandle) THEN
PutzGr.ClearDisplayList();
PutzGr.BuildDisplayList(displayList);
PutzDo.CalcTotals;
SetNewList (wdwHandle, displayList);
END;
END;
ELSE
PutzAction.InitActionBox ();
res := PutzGroup.deleteInGroup (group, putzOpts, mode);
PutzAction.ReleaseActionBox();
IF IsPutzWindow (wdwHandle)
THEN
PutzDo.CalcTotals();
RedrawEntry (wdwHandle, group);
RedrawEntry (wdwHandle, ADR(totalEntry));
END;
END;
RETURN res
END performCmdDelete;
PROCEDURE cmdError(logOpen: BOOLEAN; REF cmd, str: ARRAY OF CHAR);
VAR alt : ARRAY [0..255] OF CHAR;
BEGIN
MagicStrings.Assign ('[3][CATPUTZ:|Fehler in Kommandozeile:|', alt);
MagicStrings.Append (cmd, alt);
MagicStrings.Append ('|', alt);
MagicStrings.Append (str, alt);
MagicStrings.Append ('][[Abbruch]', alt);
IF logOpen
THEN
PutzLog.WriteLn;
PutzLog.WriteString ("Fehler in Kommandozeile:");
PutzLog.WriteLn;
PutzLog.WriteString (cmd);
PutzLog.WriteString (' : ');
PutzLog.WriteString (str);
PutzLog.WriteLn;
PutzLog.WriteString ("Lschen ber Kommandozeile abgebrochen.");
PutzLog.WriteLn;
PutzLog.CloseLog();
END;
v.int := mtAlerts.Alert (1, alt);
END cmdError;
(*$Z-*)
PROCEDURE findName (entry: ADDRESS; info: ADDRESS): BOOLEAN;
VAR namePtr : POINTER TO ARRAY [0..255] OF CHAR;
gr : ptrGrEntry;
BEGIN
gr := entry;
namePtr := info;
RETURN AssFuncs.StrIequal (gr^.info^.name^, namePtr^);
END findName;
(*$Z=*)
PROCEDURE findGroup (name: ARRAY OF CHAR; VAR group: ptrGrEntry): BOOLEAN;
VAR p : CARDINAL;
found: BOOLEAN;
BEGIN
LOOP
Lists.ResetList (putzList);
Lists.ScanEntries (putzList, Lists.forward, findName, ADR(name), found);
IF found
THEN
group := Lists.CurrentEntry (putzList);
RETURN group # NIL
ELSE
(* Suchen nach erstem _ und durch ' ' ersetzen *)
p := MagicStrings.Pos ('_', name, 0, FALSE);
IF p >= MagicStrings.Length (name)
THEN
RETURN FALSE
END;
name[p] := ' ';
END;
END;
RETURN FALSE
END findGroup;
PROCEDURE closeLog();
BEGIN
(* Ok, das war's, weiter im normalen Programm *)
PutzDo.CalcTotals;
PutzLog.WriteLn;
PutzLog.WriteLn;
PutzLog.WriteString ("--------------------------------------------------");
PutzLog.WriteLn;
PutzLog.putTime ();
PutzLog.WriteString (" Lschen ber Kommandozeile beendet.");
PutzLog.WriteLn;
PutzLog.WriteLine ("STATISTIK: ");
PutzLog.WriteString (" Gesamtanzahl Messages vorher: ");
PutzLog.WriteCard (totalEntry.preMsgs);
PutzLog.WriteLn;
PutzLog.WriteString (" Gesamtanzahl Messages nachher: ");
PutzLog.WriteCard (totalEntry.postMsgs);
PutzLog.WriteLn;
PutzLog.WriteString (" Gesamtanzahl totalgelschter Messages: ");
PutzLog.WriteCard (totalEntry.totalDel);
PutzLog.WriteLn;
PutzLog.WriteString (" Gesamtanzahl teilgelschter Messages: ");
PutzLog.WriteCard (totalEntry.partDel);
PutzLog.WriteLn;
PutzLog.WriteString (" Gesamtanzahl beschdigter Messages: ");
PutzLog.WriteCard (totalEntry.badDel);
PutzLog.WriteLn;
PutzLog.WriteString (" Gesamtanzahl Bytes vorher: ");
PutzLog.WriteCard (totalEntry.preBytes);
PutzLog.WriteLn;
PutzLog.WriteString (" Gesamtanzahl Bytes nachher: ");
PutzLog.WriteCard (totalEntry.postBytes);
PutzLog.WriteLn;
PutzLog.WriteLn;
PutzLog.CloseLog();
END closeLog;
PROCEDURE HandleCommandLine();
VAR cmd : ARRAY [0..255] OF CHAR;
ctl : CHAR;
params,
i : INTEGER;
pos : CARDINAL;
delDate : LONGCARD;
delNumber : CARDINAL;
numberSet,
dateSet,
dModeSet : BOOLEAN;
valid : BOOLEAN;
dMode : PutzTypes.delMode;
group : ptrGrEntry;
logOpen : BOOLEAN;
hlpPtr : Lists.LCarrier;
BEGIN
dateSet := FALSE;
numberSet := FALSE;
dModeSet := FALSE;
logOpen := FALSE;
params := mtCommand.ParamCount();
FOR i := 1 TO params DO
mtCommand.ParamString (i, cmd);
IF cmd[0] = '-'
THEN
ctl := cmd[1];
MagicStrings.Delete (cmd, 0, 2);
CASE CAP(ctl) OF
'D' : (* Datum in Kommandozeile *)
IF DateOk (cmd)
THEN
delDate := StrToDate (cmd);
IF delDate > ConvertDate.CurrentDate ()
THEN
(* Fehlermeldung! *)
cmdError (logOpen, cmd, 'Datum grer als Tagesdatum.');
RETURN
ELSE
dateSet := TRUE;
dModeSet := FALSE;
END;
ELSE
(* Fehlerhaftes Datum, Fehlermeldung! *)
cmdError (logOpen, cmd, 'Fehlerhaftes Datum.');
RETURN
END;
| 'G' : (* Gruppenname in Kommandozeile *)
IF findGroup (cmd, group)
THEN
(* Lschmodus setzen *)
IF ~dModeSet
THEN
IF dateSet
THEN
IF numberSet
THEN
dMode := PutzTypes.dDateAndNum
ELSE
dMode := PutzTypes.dDate
END;
ELSIF numberSet
THEN
dMode := PutzTypes.dNum
ELSE
dMode := PutzTypes.dFlags
END;
dModeSet := TRUE;
dateSet := FALSE;
numberSet := FALSE;
END;
IF ~logOpen
THEN
IF PutzLog.OpenLog (MTPaths.DataPath) THEN END;
PutzLog.putTime();
PutzLog.WriteString (PutzTypes.version);
PutzLog.WriteString (" fr CAT 3.x gestartet");
PutzLog.WriteLn;
logOpen := TRUE;
END;
IF ~performCmdDelete (group, dMode, delNumber, delDate)
THEN
(* Fehler beim Lschen! *)
cmdError (logOpen, cmd, 'Fehler beim Lschen!');
RETURN
END;
ELSE
(* Gruppe existiert nicht, Fehlermeldung *)
cmdError (logOpen, cmd, 'Gruppe nicht vorhanden.');
RETURN
END;
| 'A' : (* In allen Gruppen lschen bis auf Persnliche *)
(* Lschmodus setzen *)
IF ~dModeSet
THEN
IF dateSet
THEN
IF numberSet
THEN
dMode := PutzTypes.dDateAndNum
ELSE
dMode := PutzTypes.dDate
END;
ELSIF numberSet
THEN
dMode := PutzTypes.dNum
ELSE
dMode := PutzTypes.dFlags
END;
dModeSet := TRUE;
dateSet := FALSE;
numberSet := FALSE;
END;
(* Logfile ggf. ffnen *)
IF ~logOpen
THEN
IF PutzLog.OpenLog (MTPaths.DataPath) THEN END;
PutzLog.putTime();
PutzLog.WriteString (PutzTypes.version);
PutzLog.WriteString (" fr CAT 2.5 gestartet");
PutzLog.WriteLn;
logOpen := TRUE;
END;
Lists.ResetList (putzList);
group := Lists.NextEntry (putzList);
WHILE group # NIL DO
hlpPtr := putzList.current;
IF (group^.info^.catNumber # dataSys.private)
THEN
IF ~performCmdDelete (group, dMode, delNumber, delDate)
THEN
(* Fehler beim Lschen! *)
cmdError (logOpen, cmd, 'Fehler beim Lschen!');
RETURN
END;
END;
putzList.current := hlpPtr;
group := Lists.NextEntry (putzList);
END;
| 'M' : (* Anzahl fr Messages in Kommandozeile *)
pos := 0;
delNumber := StrToCard (cmd, pos, valid);
IF valid
THEN
numberSet := TRUE;
dModeSet := FALSE;
ELSE
(* Fehlermeldung *)
cmdError (logOpen, cmd, 'Keine Nummer.');
RETURN
END;
| 'Q' : IF logOpen THEN closeLog(); END;
quitProg := TRUE; RETURN
ELSE
(* Fehlerhafte Kommandozeile *)
cmdError (logOpen, ctl, 'Unbekannte Option.');
RETURN
END;
ELSE
IF i > 1
THEN
(* Fehlerhafte Kommandozeile! arg[1] kann Filename fr CAT.INF sein *)
cmdError (logOpen, cmd, 'Falsche Syntax.');
RETURN
END;
END;
END;
IF logOpen
THEN
closeLog();
END;
END HandleCommandLine;
VAR menuName : ARRAY [0..40] OF CHAR;
CONST RscName = "catputz.rsc";
PROCEDURE InitCatputz(): BOOLEAN;
(* Lesen von CAT.INF
* Jetzt wird die entsprechende CAT-Funktion benutzt,
* und auch die Variablen aus CAT.
* Zeile 11: Database-Pfad
*)
VAR i : CARDINAL;
infFileName,
rscName : PutzTypes.PathStr;
infName : PutzTypes.MaxStr;
success : BOOLEAN;
basePage : MagicTypes.PtrPD;
env : ADDRESS;
BEGIN
rscName := RscName;
IF InitResource (rscName)
THEN
CatGlobal.busyMouse();
PutzAction.InitModule (actBox);
CatGlobal.SetAppl ('CATPUTZ');
CatGlobal.GetApplPath (CatGlobal.infPath);
(* Jetzt CAT.INF lesen *)
CatGlobal.infName := '';
CatGlobal.infPath := '';
IF ~MTPaths.ReadInf (CatGlobal.infPath, CatGlobal.infName, FALSE, TRUE)
THEN
RETURN FALSE
END;
(* Jetzt Gruppen initialisieren *)
SetDefaultPath (MTPaths.DataPath, v.int);
LoadParameter (MTPaths.DataPath);
Infofiles.LoadInfoInf (TRUE, FALSE);
IF ~PutzGr.InitGroups() THEN MouseArrow(); RETURN FALSE END;
(* suchen nach Environment-Variable TMP oder TEMP *)
basePage := Basepage();
env := basePage^.pEnv;
PutzGr.GetTempPath(env);
mtAppl.MouseArrow();
RETURN TRUE
ELSE
RETURN FALSE
END;
END InitCatputz;
PROCEDURE TestMint ();
BEGIN
CatGlobal.isMintDomain := Mintbind.Pdomain (1) = 0;
END TestMint;
CONST
helpScan = 142C;
VAR wdwOpen: BOOLEAN;
BEGIN
TestMint();
WITH mrect DO
x := 0; y := 0; w := 1; h := 1;
END;
menuSet := mSet{0..255};
groupDeleted := FALSE;
MTPaths.DataPath := PutzTypes.whatText; (* gegen optimierenden Linker *)
mtAlerts.ConfigAlert (mtAlerts.alticon); (* mtAlerts konfigurieren *)
mtDials.DialConfig (mtDials.UseConfig, FALSE); (* mtDials konfigurieren *)
MouseArrow;
IF ~CheckSingleCAT ()
THEN
ApplTerm(0);
PrgCtrl.TermProcess (0);
END;
IF ~InitCatputz () THEN RETURN END;
WdwManager.EnableIconify (TRUE);
MouseArrow;
IF CatGlobal.multiTOS OR (CatGlobal.magIx & (CatGlobal.magIxVer >= $300))
THEN
(* MultiTOS *)
MagicStrings.Assign (' CatPutz ', menuName);
MagicStrings.Append (PutzTypes.xVersion, menuName);
v.int := MagicAES.MenuRegister (mtAppl.ApplIdent, menuName);
(* Und auch Bescheid sagen, da wir AP_TERM verstehen *)
v.int := MagicAES.ShelWrite (MagicAES.InformAES, INTEGER(BITSET{MagicAES.ApTermBit}), 0, "", "");
END;
v.bool := mtAESMenus.InitMenuline (menu);
v.int := MenuBar (menu, 1);
(* Menubar bei Windowmanager anmelden *)
WdwManager.InstallGlobalMenu (menu, msgHandler);
InitFormat();
careForWindow();
quitProg := FALSE;
HandleCommandLine();
LOOP
IF quitProg THEN EXIT END;
setMultiParam();
event := EvntPmulti ();
getMultiResult();
MagicAES.WindUpdate (MagicAES.BEGUPDATE);
IF WdwManager.HandleEvent (event, msgBuf, moButton, kstate, key, scan, keyscan, moX, moY, moClicks)
THEN END;
IF MUKEYBD IN event
THEN
IF ORD(scan) = 1 (* ESC *) THEN WdwManager.FullRedrawWdw (wdwHandle) END;
IF MenuSearch (menu, mtAppl.ApplIdent, kstate, keyscan,
menuManager, FALSE)
THEN
ELSIF (scan = helpScan)
THEN
(*
ConfVars.GetConfDefBool (cWdwOpen, wdwOpen, FALSE);
IF wdwOpen
THEN
wdwOpen := IsPutzWindow (wdwHandle);
END;
IF wdwOpen
THEN
PutzHelp.DoHelp (PutzHelp.window);
ELSE
PutzHelp.DoHelp (PutzHelp.general);
END;
*)
PutzHelp.DoHelp (PutzHelp.general);
END;
END;
WITH mrect DO
x := moX; y := moY;
END;
MagicAES.WindUpdate (MagicAES.ENDUPDATE);
EnableMenuItems();
END;
PutzGr.ClearDisplayList();
(* ClrRsrc(); *)
ConfVars.CloseConfig();
ApplTerm (0);
IF groupDeleted
THEN
PrgCtrl.TermProcess (04713H);
ELSE
PrgCtrl.TermProcess (0);
END;
END CatPutz.